package cn.tedu.charging.order.job;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Slf4j
@Component  //aware意识到,知道   下面是固定写法
public class SpringContextJobUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    /**
     * 通过Bean的名称和类型获取容器中的bean对象
     * @param beanName
     * @param requiredType
     * @return
     */
    //public static Object getBean(String beanName,Class requiredType) {    //这个会让DeviceCheckJob里报错，所以仿照源码改一下
    public static <T> T getBean(String beanName,Class<T> requiredType) {    //上面那个写法会需要转型，这个写法则是给你什么类型，就返回什么类型，不需要转型
        return applicationContext.getBean(beanName,requiredType);   //需要上面写为static静态块才不报错
        //注入的注解Autowired  Resource分别通过名字、类型进行注入，这里getBean方法里也可以看到是通过名字、类型两种方式获取
    }

}
